package interfaceTest;

class Animal {
    String name;

    Animal(String name) {
        this.name = name;
    }
}

interface IFlying {
    void fly();
}

interface ISwimming {
    void swim();
}

interface IRunning {
    void run();
}

//如果既要继承又要实现则必须先extends 后 implements 实现多个接口时接口直接用 , 分隔
class Duck extends Animal implements IFlying, ISwimming, IRunning {

    public Duck(String name) {
        super(name);
    }

    @Override
    public void fly() {
        System.out.println(name + "在飞");
    }

    @Override
    public void swim() {
        System.out.println(name + "在游泳");
    }

    @Override
    public void run() {
        System.out.println(name + "在跑");
    }
}

class Dog extends Animal implements IRunning, ISwimming {
    public Dog(String name) {
        super(name);
    }

    @Override
    public void run() {
        System.out.println(name + "在跑");
    }

    @Override
    public void swim() {
        System.out.println(name + "在游泳");
    }
}

class Bird extends Animal implements IFlying {
    public Bird(String name) {
        super(name);
    }

    @Override
    public void fly() {
        System.out.println(name + "在飞");
    }
}

interface IMove extends IFlying, IRunning, ISwimming {
    void move();
}

class Robot implements IMove {

    @Override
    public void fly() {
        System.out.println("机器人在飞");
    }

    @Override
    public void swim() {
        System.out.println("机器人在游泳");
    }

    @Override
    public void run() {
        System.out.println("机器人在跑");
    }

    @Override
    public void move() {
        System.out.println("机器人在移动");
    }
}

public class Test2 {

    public static void walk(IRunning irunning) {
        irunning.run();
    }

    public static void main(String[] args) {
        //java中只能单继承(一个类只能继承另一个类) 不支持多继承 那难道java中就不会有多继承的需求了吗?
        //并不是 java中也会有"多继承"的场景但可以通过接口来解决 因为一个类可以实现多个接口
        //接口之间也可以 extends 并且可以 extends 多个接口
        //接口表达的含义是：具有 啥啥啥 特性
        //接口让我们在使用类时不必关注其具体类型,而只关注某个类是否具备某种能力

        //只要是可以run的对象都可以调用这个方法 并且表现出不同的行为(多态)
        walk(new Duck("鸭鸭"));//鸭鸭在跑
        walk(new Dog("旺旺"));//旺旺在跑
        walk(new Robot());//机器人在跑


    }
}
